#include "ordenar.h"
#include "TADPersona.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

void OrdBurbuja ( int Vector[], int Tam){
	int Pos=0, Ubi=0, Inter=0;

	for (Pos = 0; Pos < Tam-1; Pos++){
		for (Ubi = 0; Ubi < Tam-1; Ubi++){
			if ( Vector[Ubi] > Vector[Ubi+1] ){
				Inter = Vector[Ubi];
				Vector[Ubi] = Vector[Ubi+1];
				Vector[Ubi+1] = Inter;
			}
		}
	}
}

void OrdInsercion ( int Vector[], int Tam){
	int Pos=0, Ubi=0, Inter=0;

	for (Pos = 0; Pos < Tam; Pos++){
		Inter = Vector[Pos];
		Ubi = Pos - 1;
		while (( Ubi >= 0 ) && (Vector[Ubi] > Inter)){
			Vector[Ubi+1] = Vector[Ubi];
			Ubi--;
		}
		Vector[Ubi+1] = Inter;
	}
}

void OrdSeleccion ( int Vector[], int Tam){
	int Pos=0, Ubi=0, Inter=0;

	for (Pos = 0; Pos < Tam - 1; Pos++){
		int PosMin = Pos;
		for (Ubi = Pos + 1; Ubi < Tam; Ubi++){
			if (Vector[Ubi] < Vector[PosMin]){ PosMin = Ubi;}
		}
		Inter = Vector[Pos];
		Vector[Pos] = Vector[PosMin];
		Vector[PosMin] = Inter;
	}
}

void OrdBurbujaPer (Persona	*Dades, int Tam){
	int Pos=0, Ubi=0, Res=0;
	Persona Inter;

	Inter = GenerarPerFic();
	for (Pos = 0; Pos < Tam-1; Pos++) {
		for (Ubi = 0; Ubi < Tam-1; Ubi++) {
			Res = CompararPersona(Dades[Ubi], Dades[Ubi+1]);
			if ( Res == 1 ) {
				CopiarPersona(Dades[Ubi], &Inter);
				CopiarPersona(Dades[Ubi+1], &Dades[Ubi]);
				CopiarPersona(Inter, &Dades[Ubi+1]);
			}
		}
	}
}

void OrdInsercionPer (Persona	*Dades, int Tam){
	int Pos=0, Ubi=0, Res=0;
	Persona Inter;

	Inter = GenerarPerFic();
	for (Pos = 0; Pos < Tam; Pos++){
		CopiarPersona(Dades[Pos], &Inter);
		Ubi = Pos - 1;
		while (( Ubi >= 0 ) && (CompararPersona(Dades[Ubi], Inter) == 1)){
			CopiarPersona(Dades[Ubi], &Dades[Ubi+1]);
			Ubi--;
		}
		CopiarPersona(Inter, &Dades[Ubi+1]);
	}
}

void OrdSeleccionPer ( Persona *Dades, int Tam){
	int Pos=0, Ubi=0, Res=0;
	Persona Inter;

	Inter = GenerarPerFic();
	for (Pos = 0; Pos < Tam - 1; Pos++){
		int PosMin = Pos;
		for (Ubi = Pos + 1; Ubi < Tam; Ubi++){
			if (CompararPersona(Dades[Ubi], Dades[PosMin]) == 2) {PosMin = Ubi;}
		}
		CopiarPersona(Dades[Pos], &Inter);
		CopiarPersona(Dades[PosMin], &Dades[Pos]);
		CopiarPersona(Inter, &Dades[PosMin]);
	}
}